Added an explanation for the way the code is set up.
[lhc/web/wiklou.git] / includes / installer / Updaters.php
1 <?php
2
3 /**
4 * All DBs supported by MediaWiki need to implement this. Base interface for
5 * Updaters, which is replacing updaters.inc
6 */
7 interface Updaters {
8
9 /**
10 * Get an array of updates to perform on the database. Should return a
11 * mutli-dimensional array. The main key is the MediaWiki version (1.12,
12 * 1.13...) with the values being arrays of updates, identical to how
13 * updaters.inc did it (for now)
14 *
15 * @return Array
16 */
17 public function getUpdates();
18
19 }
20
21 /**
22 * Mysql implementation.
23 */
24 class MysqlUpdater implements Updaters {
25
26 public function getUpdates() {
27 return array(
28 '1.2' => array(
29 array( 'add_field', 'ipblocks', 'ipb_id', 'patch-ipblocks.sql' ),
30 array( 'add_field', 'ipblocks', 'ipb_expiry', 'patch-ipb_expiry.sql' ),
31 array( 'do_interwiki_update' ),
32 array( 'do_index_update' ),
33 array( 'add_table', 'hitcounter', 'patch-hitcounter.sql' ),
34 array( 'add_field', 'recentchanges', 'rc_type', 'patch-rc_type.sql' ),
35 ),
36 '1.3' => array(
37 array( 'add_field', 'user', 'user_real_name', 'patch-user-realname.sql' ),
38 array( 'add_table', 'querycache', 'patch-querycache.sql' ),
39 array( 'add_table', 'objectcache', 'patch-objectcache.sql' ),
40 array( 'add_table', 'categorylinks', 'patch-categorylinks.sql' ),
41 array( 'do_old_links_update' ),
42 array( 'fix_ancient_imagelinks' ),
43 array( 'add_field', 'recentchanges', 'rc_ip', 'patch-rc_ip.sql' ),
44 ),
45 '1.4' => array(
46 array( 'do_image_name_unique_update' ),
47 array( 'add_field', 'recentchanges', 'rc_id', 'patch-rc_id.sql' ),
48 array( 'add_field', 'recentchanges', 'rc_patrolled', 'patch-rc-patrol.sql' ),
49 array( 'add_table', 'logging', 'patch-logging.sql' ),
50 array( 'add_field', 'user', 'user_token', 'patch-user_token.sql' ),
51 array( 'do_watchlist_update' ),
52 array( 'do_user_update' ),
53 ),
54 '1.5' => array(
55 array( 'do_schema_restructuring' ),
56 array( 'add_field', 'logging', 'log_params', 'patch-log_params.sql' ),
57 array( 'check_bin', 'logging', 'log_title', 'patch-logging-title.sql', ),
58 array( 'add_field', 'archive', 'ar_rev_id', 'patch-archive-rev_id.sql' ),
59 array( 'add_field', 'page', 'page_len', 'patch-page_len.sql' ),
60 array( 'do_inverse_timestamp' ),
61 array( 'do_text_id' ),
62 array( 'add_field', 'revision', 'rev_deleted', 'patch-rev_deleted.sql' ),
63 array( 'add_field', 'image', 'img_width', 'patch-img_width.sql' ),
64 array( 'add_field', 'image', 'img_metadata', 'patch-img_metadata.sql' ),
65 array( 'add_field', 'user', 'user_email_token', 'patch-user_email_token.sql' ),
66 array( 'add_field', 'archive', 'ar_text_id', 'patch-archive-text_id.sql' ),
67 array( 'do_namespace_size' ),
68 array( 'add_field', 'image', 'img_media_type', 'patch-img_media_type.sql' ),
69 array( 'do_pagelinks_update' ),
70 array( 'do_drop_img_type' ),
71 array( 'do_user_unique_update' ),
72 array( 'do_user_groups_update' ),
73 array( 'add_field', 'site_stats', 'ss_total_pages', 'patch-ss_total_articles.sql' ),
74 array( 'add_table', 'user_newtalk', 'patch-usernewtalk2.sql' ),
75 array( 'add_table', 'transcache', 'patch-transcache.sql' ),
76 array( 'add_field', 'interwiki', 'iw_trans', 'patch-interwiki-trans.sql' ),
77 array( 'add_table', 'trackbacks', 'patch-trackbacks.sql' ),
78 ),
79 '1.6' => array(
80 array( 'do_watchlist_null' ),
81 array( 'do_logging_timestamp_index' ),
82 array( 'add_field', 'ipblocks', 'ipb_range_start', 'patch-ipb_range_start.sql' ),
83 array( 'do_page_random_update' ),
84 array( 'add_field', 'user', 'user_registration', 'patch-user_registration.sql' ),
85 array( 'do_templatelinks_update' ),
86 array( 'add_table', 'externallinks', 'patch-externallinks.sql' ),
87 array( 'add_table', 'job', 'patch-job.sql' ),
88 array( 'add_field', 'site_stats', 'ss_images', 'patch-ss_images.sql' ),
89 array( 'add_table', 'langlinks', 'patch-langlinks.sql' ),
90 array( 'add_table', 'querycache_info', 'patch-querycacheinfo.sql' ),
91 array( 'add_table', 'filearchive', 'patch-filearchive.sql' ),
92 array( 'add_field', 'ipblocks', 'ipb_anon_only', 'patch-ipb_anon_only.sql' ),
93 array( 'do_rc_indices_update' ),
94 ),
95 '1.9' => array(
96 array( 'add_field', 'user', 'user_newpass_time', 'patch-user_newpass_time.sql' ),
97 array( 'add_table', 'redirect', 'patch-redirect.sql' ),
98 array( 'add_table', 'querycachetwo', 'patch-querycachetwo.sql' ),
99 array( 'add_field', 'ipblocks', 'ipb_enable_autoblock', 'patch-ipb_optional_autoblock.sql' ),
100 array( 'do_backlinking_indices_update' ),
101 array( 'add_field', 'recentchanges', 'rc_old_len', 'patch-rc_len.sql' ),
102 array( 'add_field', 'user', 'user_editcount', 'patch-user_editcount.sql' ),
103 ),
104 '1.10' => array(
105 array( 'do_restrictions_update' ),
106 array( 'add_field', 'logging', 'log_id', 'patch-log_id.sql' ),
107 array( 'add_field', 'revision', 'rev_parent_id', 'patch-rev_parent_id.sql' ),
108 array( 'add_field', 'page_restrictions', 'pr_id', 'patch-page_restrictions_sortkey.sql' ),
109 array( 'add_field', 'revision', 'rev_len', 'patch-rev_len.sql' ),
110 array( 'add_field', 'recentchanges', 'rc_deleted', 'patch-rc_deleted.sql' ),
111 array( 'add_field', 'logging', 'log_deleted', 'patch-log_deleted.sql' ),
112 array( 'add_field', 'archive', 'ar_deleted', 'patch-ar_deleted.sql' ),
113 array( 'add_field', 'ipblocks', 'ipb_deleted', 'patch-ipb_deleted.sql' ),
114 array( 'add_field', 'filearchive', 'fa_deleted', 'patch-fa_deleted.sql' ),
115 array( 'add_field', 'archive', 'ar_len', 'patch-ar_len.sql' ),
116 ),
117 '1.11' => array(
118 array( 'add_field', 'ipblocks', 'ipb_block_email', 'patch-ipb_emailban.sql' ),
119 array( 'do_categorylinks_indices_update' ),
120 array( 'add_field', 'oldimage', 'oi_metadata', 'patch-oi_metadata.sql' ),
121 array( 'do_archive_user_index' ),
122 array( 'do_image_user_index' ),
123 array( 'do_oldimage_user_index' ),
124 array( 'add_field', 'archive', 'ar_page_id', 'patch-archive-page_id.sql' ),
125 array( 'add_field', 'image', 'img_sha1', 'patch-img_sha1.sql' ),
126 ),
127 '1.12' => array(
128 array( 'add_table', 'protected_titles', 'patch-protected_titles.sql' ),
129 ),
130 '1.13' => array(
131 array( 'add_field', 'ipblocks', 'ipb_by_text', 'patch-ipb_by_text.sql' ),
132 array( 'add_table', 'page_props', 'patch-page_props.sql' ),
133 array( 'add_table', 'updatelog', 'patch-updatelog.sql' ),
134 array( 'add_table', 'category', 'patch-category.sql' ),
135 array( 'do_category_population' ),
136 array( 'add_field', 'archive', 'ar_parent_id', 'patch-ar_parent_id.sql' ),
137 array( 'add_field', 'user_newtalk', 'user_last_timestamp', 'patch-user_last_timestamp.sql' ),
138 array( 'do_populate_parent_id' ),
139 array( 'check_bin', 'protected_titles', 'pt_title', 'patch-pt_title-encoding.sql', ),
140 array( 'maybe_do_profiling_memory_update' ),
141 array( 'do_filearchive_indices_update' ),
142 ),
143 '1.14' => array(
144 array( 'add_field', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ),
145 array( 'do_active_users_init' ),
146 array( 'add_field', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
147 ),
148 '1.15' => array(
149 array( 'do_unique_pl_tl_il' ),
150 array( 'add_table', 'change_tag', 'patch-change_tag.sql' ),
151 array( 'add_table', 'tag_summary', 'patch-change_tag.sql' ),
152 array( 'add_table', 'valid_tag', 'patch-change_tag.sql' ),
153 ),
154 '1.16' => array(
155 array( 'add_table', 'user_properties', 'patch-user_properties.sql' ),
156 array( 'add_table', 'log_search', 'patch-log_search.sql' ),
157 array( 'do_log_search_population' ),
158 array( 'add_field', 'logging', 'log_user_text', 'patch-log_user_text.sql' ),
159 array( 'add_table', 'l10n_cache', 'patch-l10n_cache.sql' ),
160 array( 'add_table', 'external_user', 'patch-external_user.sql' ),
161 array( 'add_index', 'log_search', 'ls_field_val', 'patch-log_search-rename-index.sql' ),
162 array( 'add_index', 'change_tag', 'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
163 array( 'add_field', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ),
164 array( 'do_update_transcache_field' ),
165 array( 'rename_eu_wiki_id' ),
166 array( 'do_update_mime_minor_field' ),
167 array( 'do_populate_rev_len' ),
168 ),
169 '1.17' => array(
170 array( 'add_table', 'iwlinks', 'patch-iwlinks.sql' ),
171 array( 'add_index', 'iwlinks', 'iwl_prefix_from_title', 'patch-rename-iwl_prefix.sql' ),
172 array( 'add_field', 'updatelog', 'ul_value', 'patch-ul_value.sql' ),
173 array( 'add_field', 'interwiki', 'iw_api', 'patch-iw_api_and_wikiid.sql' ),
174 ),
175 );
176 }
177
178 }
179
180 /**
181 * Sqlite implementation.
182 */
183 class SqliteUpdater implements Updaters {
184
185 public function getUpdates() {
186 return array(
187 '1.14' => array(
188 array( 'add_field', 'site_stats', 'ss_active_users', 'patch-ss_active_users.sql' ),
189 array( 'do_active_users_init' ),
190 array( 'add_field', 'ipblocks', 'ipb_allow_usertalk', 'patch-ipb_allow_usertalk.sql' ),
191 array( 'sqlite_initial_indexes' ),
192 ),
193 '1.15' => array(
194 array( 'add_table', 'change_tag', 'patch-change_tag.sql' ),
195 array( 'add_table', 'tag_summary', 'patch-change_tag.sql' ),
196 array( 'add_table', 'valid_tag', 'patch-change_tag.sql' ),
197 ),
198 '1.16' => array(
199 array( 'add_table', 'user_properties', 'patch-user_properties.sql' ),
200 array( 'add_table', 'log_search', 'patch-log_search.sql' ),
201 array( 'do_log_search_population' ),
202 array( 'add_field', 'logging', 'log_user_text', 'patch-log_user_text.sql' ),
203 array( 'add_table', 'l10n_cache', 'patch-l10n_cache.sql' ),
204 array( 'add_table', 'external_user', 'patch-external_user.sql' ),
205 array( 'add_index', 'log_search', 'ls_field_val', 'patch-log_search-rename-index.sql' ),
206 array( 'add_index', 'change_tag', 'change_tag_rc_tag', 'patch-change_tag-indexes.sql' ),
207 array( 'add_field', 'redirect', 'rd_interwiki', 'patch-rd_interwiki.sql' ),
208 array( 'do_update_transcache_field' ),
209 array( 'sqlite_setup_searchindex' ),
210 ),
211 '1.17' => array(
212 array( 'add_table', 'iwlinks', 'patch-iwlinks.sql' ),
213 array( 'add_index', 'iwlinks', 'iwl_prefix_from_title', 'patch-rename-iwl_prefix.sql' ),
214 array( 'add_field', 'updatelog', 'ul_value', 'patch-ul_value.sql' ),
215 array( 'add_field', 'interwiki', 'iw_api', 'patch-iw_api_and_wikiid.sql' ),
216 ),
217 );
218 }
219
220 }
221
222 /**
223 * Oracle implementation.
224 */
225 class OracleUpdater implements Updaters {
226
227 public function getUpdates() {
228 return array();
229 }
230
231 }